package com.taotao.cart.service;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.fasterxml.jackson.core.type.TypeReference;
import com.github.abel533.entity.Example;
import com.taotao.cart.mapper.CartMapper;
import com.taotao.cart.pojo.Cart;
import com.taotao.cart.pojo.ItemVO;
import com.taotao.common.service.HttpClientService;

/**
 * 登陆状态下的购物操作
 * @author joedy
 *
 */
@Service
public class CartService {
	
	@Autowired
	private CartMapper cartMapper;
	
	@Autowired
	private HttpClientService httpClientService;

	/**
	 * 添加购物车
	 * @param itemId
	 * @param id
	 */
	public void saveCart(Long itemId, Long id) {
		
		// 先查购物车信息
		Cart record = new Cart();
		record.setUserId(id);
		record.setItemId(itemId);
		Cart cart = this.cartMapper.selectOne(record);
		// 没有该记录,新增购物车记录
		if(cart == null){
			cart = new Cart();
			cart.setUserId(id);
			cart.setItemId(itemId);
			cart.setNum(1);
			// 查询商品信息
			ItemVO itemVO = this.httpClientService.doGet("http://manage.taotao.com/rest/api/item/" + itemId, new TypeReference<ItemVO>() {
			});
			cart.setItemImage(itemVO.getImages()[0]);
			cart.setItemPrice(itemVO.getPrice());
			cart.setItemTitle(itemVO.getTitle());
			cart.setCreated(new Date());
			cart.setUpdated(cart.getCreated());
			// 执行新增操作
			this.cartMapper.insertSelective(cart);
		} else {
			// 有该记录更新数量
			cart.setNum(cart.getNum() + 1);
			cart.setUpdated(new Date());
			// TODO:更新价格
			// 执行更新操作
			this.cartMapper.updateByPrimaryKeySelective(cart);
		}
		
	}

	/**
	 * 查询购物信息
	 * @param id
	 * @return
	 */
	public List<Cart> queryCarts(Long userId) {
		Cart record = new Cart();
		record.setUserId(userId);
		return this.cartMapper.select(record);
	}

	/**
	 * 根据用户id和商品id更新数量
	 * @param itemId
	 * @param userId
	 * @param num
	 */
	public void updateNum(Long itemId, Long userId, Integer num) {
		Cart record = new Cart();
		record.setNum(num);
		record.setUpdated(new Date());
		
		// 创建更新条件对象
		Example example = new Example(Cart.class);
		example.createCriteria().andEqualTo("userId", userId).andEqualTo("itemId", itemId);
		// 执行更新操作，第一个参数：更新的对象  第二参数：条件
		this.cartMapper.updateByExampleSelective(record, example);
	}

	/**
	 * 删除购物车
	 * @param itemId
	 * @param userId
	 */
	public void deleteCart(Long itemId, Long userId) {
		
		Cart record = new Cart();
		record.setItemId(itemId);
		record.setUserId(userId);
		this.cartMapper.delete(record);
	}

}
